class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm
    this.key = key
    this.cb = cb

    // 把 watcher 对象记录到 Dep 类的静态属性 target
    Dep.target = this

    // 记录旧值，并触发 getter 让 target 的内容加入 subs
    this.oldValue = vm[key]
    // 防止重复触发
    Dep.target = null
  }

  update() {
    const newValue = this.vm[this.key]
    if (this.oldValue === newValue) return
    this.cb(newValue)
  }
}